package br.com.guiav6.sisguia.component;

import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.apache.commons.lang.StringUtils;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.guiav6.sisguia.entity.Bloco;
import br.com.guiav6.sisguia.entity.Cep;
import br.com.guiav6.sisguia.enuns.Bairro;
import br.com.guiav6.sisguia.service.BlocoService;
import br.com.guiav6.sisguia.service.CepService;
import br.com.guiav6.sisguia.service.ComboService;

@Component("mapaAction")
@Scope(value = "session")
public class MapaAction extends Action{
	
	Bloco bloco;
	
	Cep cep;
	
	private String logradouro;
	
	private List<SelectItem> blocoSelectItem;
	
	private Map<Integer, String> blocoMap = new TreeMap<Integer, String>();
	
	@Autowired(required = true)
	ComboService comboService;
	
	@Autowired(required = true)
	BlocoService blocoService;
	
	@Autowired(required = true)
	CepService cepService;
	
	public String iniciarCadastro(){
		bloco = new Bloco();
		cep = new Cep();
		return navigate("cadastro.mapa");
	}
	
	public void findMapaByCep(ActionEvent evt){
		String mapaImagem;
		cep = cepService.findByNuCep(cep.getNuCep());
		if(cep == null){
			addWarnMessage(null, "mapa.nao.encontrado");
			RequestContext.getCurrentInstance().addCallbackParam(Constants.OK, false);
		}else{
			if(cep.getLogradouro() == null){
				mapaImagem = cep.getCepPai().getLogradouro().getImagem();
				logradouro = cep.getCepPai().getLogradouro().getLogradouro() + " " + cep.getCepPai().getLogradouroComplemento().getComplemento();
			}else{
				mapaImagem = cep.getLogradouro().getImagem();
				logradouro = cep.getLogradouro().getLogradouro();
			}
			if(cep.getBairro().getId().intValue() == Bairro.ASA_SUL.getId()){
				cep.setPathMapa(Constants.PATH_MAPA_ASA_SUL + mapaImagem);
			}else{
				cep.setPathMapa(Constants.PATH_MAPA_ASA_NORTE + mapaImagem);
			}
			for(int i = 1; i <= 1750; i++){
				blocoMap.put(i, "ui-state-disponible");
			}
			RequestContext.getCurrentInstance().addCallbackParam(Constants.OK, true);
		}
	}
	
	public void salvar(ActionEvent evt){
		if(StringUtils.isBlank(bloco.getPosicao())){
			addWarnMessage(null, "espaco.bloco.vazio");
		}else{
			bloco.setCep(cep);
			blocoService.salvar(bloco);
			addInfoMessage(null, "cadastro.sucesso");
		}
	}
	
	public Bloco getBloco() {
		return bloco;
	}

	public void setBloco(Bloco bloco) {
		this.bloco = bloco;
	}

	public Cep getCep() {
		return cep;
	}

	public void setCep(Cep cep) {
		this.cep = cep;
	}

	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public List<SelectItem> getBlocoSelectItem() {
		blocoSelectItem = comboService.findBlocos();
		return blocoSelectItem;
	}

	public Map<Integer, String> getBlocoMap() {
		return blocoMap;
	}

}